/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 *
 * @author Enrique
 */

// CLASE PARA GENERAR PAQUETES

class Generacion {
    
    // metodo para generar paquetes en base a los ratios de crecimiento obtenidos
    public static void generarPaquetes(Simulacion simu) {
        
        simu.getListaPaquetesARutear().clear(); // limpio la lista de paquetes a rutear
        
        // itero sobre el arbol de ratios
        for (Map.Entry<String, Map<String,Integer>> origen : simu.getArbolRatios().entrySet()){    // para cada uno de los origenes
            
            for (Map.Entry<String,Integer> destino : origen.getValue().entrySet()){ // para cada uno de los destinos
                
                if (Generacion.factor() < 0.025){
                
                simu.getArbolPaquetes().get(origen.getKey()).put(destino.getKey(), destino.getValue() + 
                                                                    simu.getArbolPaquetes().get(origen.getKey()).get(destino.getKey()));
                
                
                    for (int i=0; i<simu.getArbolPaquetes().get(origen.getKey()).get(destino.getKey()); i++){   // para cada uno de los paquetes que se deben crear

                        Paquete paquete = new Paquete();    //creo un nuevo paquete
                        paquete.setFechaHoraRecepcion(simu.getFechaHoraSim());
                        paquete.setCiudadByIdCiudadOrigen(Nodo.buscarNodoPorAbrev(origen.getKey(), simu.getListaNodos()).getCiudad());
                        paquete.setCiudadByIdCiudadDestino(Nodo.buscarNodoPorAbrev(destino.getKey(), simu.getListaNodos()).getCiudad());

                        Nodo.buscarNodoPorAbrev(origen.getKey(), simu.getListaNodos()).getCiudad().setCapDisp(Nodo.buscarNodoPorAbrev(origen.getKey(), simu.getListaNodos()).getCiudad().getCapDisp() - 1);

                        //paquete.getCiudadByIdCiudadOrigen().setCapDisp(paquete.getCiudadByIdCiudadOrigen().getCapDisp() -1);

                        simu.getListaPaquetesARutear().add(paquete);    // agrego el paquete


                    }
                }
            }
            
        }
        
    }

    static void rellenarArbolPaquetes(Simulacion simu) {
        
        for (Map.Entry<String, Map<String,Integer>> origen : simu.getArbolRatios().entrySet()){    // para cada uno de los origenes
            
            Map<String,Integer> origenPaquetes = new LinkedHashMap<String,Integer>();
            
            for (Map.Entry<String,Integer> destino : origen.getValue().entrySet()){ // para cada uno de los destinos
                origenPaquetes.put(destino.getKey(),0);
            }
            
            simu.getArbolPaquetes().put(origen.getKey(),origenPaquetes);
            
        }
    }
    
    
    
    
    static double factor(){
        return Math.random();
    }
    
}

